/**
	\file shell/shell.h
	\brief Biblioteca de funciones del shell
*/
#ifndef _SHELL_H_
#define _SHELL_H_

#define VARIABLESENV 10 /*!< cantidad de variables de entorno */
#define ENVVARSIZE 32 /*!< tamanio de la variable de entorno */
#define TERM_SODIUM 0
#define TERM_LOG    1

void vFnManejadorTecladoShell(unsigned char  scanCode);

char cFnGetch();
char cFnPausa();
int iFnGetArg(int iPos, int iNumero, char* stResultado, int iAnchoMaximo);
int iFnXtoI (char *c);
int iFnHtoI (char *c);

void vFnAPM_info();
void vFnAPM_shutdown();

void vFnLoopReloj();
void vFnImprimirMenu ();
void vFnImprimirContexto();
void vFnMenuInstanciarInit();
void vFnMostrarListaParticiones();
void vFnBorrarUltimaPartFija();
void vFnAgregarPartFija(char*);
void vFnResetearListaPart();
int iFnShellActivo();


void vFnImprimirMenu ();
void vFnImprimirSeparadores ();
/**
	\defgroup shellCMD Funciones del shell
*/
/*@{*/
void vFnShell ();
void vFnMenuAyuda ();

//Inicio modificacion Fernando***********
//***************************************
void vFnMenuDump (int,int);
void vFnMenuWriteArch(int,int);
void vFnMenuOptKill(int);
void iFnTomaPrimerPara(); 
void iFnTomaNParametro(int,char *);
void vFnConvierteACadena(int, char *);
//Fin modificacion Fernando**************
//***************************************

void vFnMenuKill (int);
void vFnMenuKillSeg (int);
void vFnMenuMem ();
void vFnMenuVer ();
void vFnMenuDesc (int,int);
void vFnMenuEjecutar(int);
void vFnMenuStack (int,int);
void vFnMenuGdt ();
void vFnMenuIdt ();
void vFnMenuCambiaTeclado (int);
void vFnMenuCls ();
void vFnMenuTSS (int);
void vFnMenuBitmap ();
void vFnMenuSegs ();
void vFnMenuPag (int);
void vFnMenuPs ();
void vFnMenuExec (int,int);
void vFnMenuExecSeg (int,int);
void vFnMenuLeerArch(int);
void vFnMenuCheck (int);
void vFnMenuSet (int);
void vFnSumaFpu (int);
void vFnMenuSumaFpu(int,int);
void vFnMenuVerSemaforos();
void vFnMenuVerShm();
void vFnMenuTestptrace(int);
void vFnMenuFd ();
void vFnMenuLs (int);
void vFnMenuCD(int);
void vFnMenuRm(int);

void vFnTermLog (unsigned char ucCaracter);

char *cpFnGetEnv(char *cpVariable);
void vFnGetAllEnv();
void vFnSetEnv(char *cpVariable, char *cpValor);
void vFnUnSetEnv(char *cpVariable);
/*@}*/

/** \brief Almacena las variables de entorno */
typedef struct {
	char cpVariable[ENVVARSIZE+1];
	char cpValor[ENVVARSIZE+1];
	int	iActiva;
}stuENV;

/**
	\ingroup shellCMD
*/
void vFnInicializarEnv();

stuENV pstuENV[VARIABLESENV]; /*!< vector de variables de entorno */


unsigned long ulPidProcesoForeground; /*!< Pid del proceso foreground en este Shell */
unsigned long uiAPM_ok;
unsigned long uiAPM_check_ax;
unsigned long uiAPM_check_bx;
unsigned long uiAPM_check_cx;

unsigned long uiAPM_32_cs;
unsigned long uiAPM_offset_entry_point;
unsigned long uiAPM_16_cs;
unsigned long uiAPM_ds;

#endif
